// 导入包提供的类
import WxRequest from 'mina-request'
import { getStorage, clearStorage } from './storage'
import { toast, modal } from './extendApi'
import env from './env'
// 实例化请求对象
const instance = new WxRequest({
  baseURL: env.baseURL, // 基础路径
  timeout: 5000, // 超时时长
  isLoading: false // 关闭默认的加载效果 在发送请求时可以传入{isLoading: true}配置项开启默认加载效果
})
// 设置请求拦截器
instance.interceptors.request = (config) => {
  // 在请求头中添加token
  const token = getStorage('token')
  if (token) config.header['token'] = token
  return config
}
// 设置响应拦截器
instance.interceptors.response = async (response) => {
  // wx.request 会对服务器返回数据进行包装response.data才是真正返回的数据
  // 获取响应数据中的 isSuccess(请求是否发送成功)和 data(服务器真正返回的数据)
  const { isSuccess, data } = response
  // 上传文件时返回的data为json字符串格式
  if (isSuccess) {
    // 根据响应码判断请求返回的状态
    switch (data.code) {
      // code:200 请求成功
      case 200:
        return data // 请求成功返回简化后的数据
      // code:208 token失效
      case 208:
        // 提示用户重新登录
        const isConfirm = await modal('提示', '登录过期请重新登录', false)
        // 用户点击确定
        if (isConfirm) {
          // 清空本地存储
          clearStorage()
          // 跳转到登录页面
          wx.navigateTo({
            url: '/pages/login/login'
          })
          // 返回失败的Promise终止状态
          return Promise.reject(response)
        }
      default:
        toast('小程序出现异常，请联系客服或稍后重试')
        // 返回失败的Promise终止状态
        return Promise.reject(response)
    }
  } else {
    toast('网络出现异常', 'error')
    // 返回失败的Promise终止状态
    return Promise.reject(response)
  }
}
// 将请求示例进行暴露
export default instance
